package com.yc.sole.framework.mybatis.util;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yc.sole.framework.mybatis.page.Paging;

import java.io.Serializable;
import java.util.List;

/**
 * @author yizuomin
 * @date 2022/11/23 15:12
 **/
public class PageUtil {
    private PageUtil() {

    }

    public static <S, D extends Serializable> Paging<D> pageCopy(IPage<S> orig, Class<D> clazz) {
        Paging<D> paging = new Paging<>(orig.getCurrent(), orig.getSize(), orig.getTotal());

        List<D> records = BeanUtil.copyToList(orig.getRecords(), clazz);
        paging.setRecords(records);
        return paging;
    }

    public static <S, D extends Serializable> void pageCopy(IPage<S> orig, Paging<D> dest, Class<D> clazz) {
        List<D> records = BeanUtil.copyToList(orig.getRecords(), clazz);

        dest.setCurrent(orig.getCurrent())
                .setSize(orig.getSize())
                .setTotal(orig.getTotal())
                .setRecords(records);
    }

    public static <S extends Serializable, D extends Serializable> Paging<D> pageCopy(Paging<S> orig, Class<D> clazz) {
        Paging<D> paging = new Paging<>(orig.getCurrent(), orig.getSize(), orig.getTotal());

        List<D> records = BeanUtil.copyToList(orig.getRecords(), clazz);
        paging.setRecords(records);
        return paging;
    }

    public static <S extends Serializable, D extends Serializable> void pageCopy(Paging<S> orig, Paging<D> dest, Class<D> clazz) {
        List<D> records = BeanUtil.copyToList(orig.getRecords(), clazz);

        dest.setCurrent(orig.getCurrent())
                .setSize(orig.getSize())
                .setTotal(orig.getTotal())
                .setRecords(records);
    }

    public static <T> Page<T> toMybatisPage(Paging<?> paging) {
        return new Page<>(paging.getCurrent(), paging.getSize(), paging.getTotal());
    }
}
